import sys
from pathlib import Path

def dividir_zxp(ruta_archivo, lineas_sector2_por_archivo, nombre_base):
    with open(ruta_archivo, "r", encoding="utf-8") as f:
        lines = [line.rstrip("\n") for line in f]

    if len(lines) < 3:
        print("El archivo no tiene la estructura esperada.")
        return

    header = lines[0]
    split1_index = 1
    try:
        split2_index = lines.index('', split1_index + 1)
    except ValueError:
        print("No se encontró el segundo separador (línea vacía).")
        return

    sector2 = lines[split1_index + 1 : split2_index]
    sector3 = lines[split2_index + 1 :]

    total_lineas_sector2 = len(sector2)
    total_lineas_sector3 = len(sector3)

    if total_lineas_sector3 * 8 < total_lineas_sector2:
        print("Sector 3 tiene menos líneas de las esperadas (debería tener 1 por cada 8 del sector 2).")
        return

    cantidad_archivos = (total_lineas_sector2 + lineas_sector2_por_archivo - 1) // lineas_sector2_por_archivo

    for i in range(cantidad_archivos):
        inicio_s2 = i * lineas_sector2_por_archivo
        fin_s2 = min((i + 1) * lineas_sector2_por_archivo, total_lineas_sector2)
        s2_parte = sector2[inicio_s2:fin_s2]

        # Para sector 3, tomamos la cantidad de líneas que corresponde (sector 2 dividido 8)
        inicio_s3 = inicio_s2 // 8
        fin_s3 = (fin_s2 + 7) // 8  # redondeo hacia arriba
        s3_parte = sector3[inicio_s3:fin_s3]

        nombre_archivo = f"{nombre_base}{i + 1}.zxp"
        with open(nombre_archivo, "w", encoding="utf-8") as out:
            out.write(header + "\n")
            out.write("\n")
            out.write("\n".join(s2_parte) + "\n")
            out.write("\n")
            out.write("\n".join(s3_parte) + "\n")

        print(f"Archivo generado: {nombre_archivo}")

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Uso: python dividir_zxp.py <archivo.zxp> <lineas_sector2_por_archivo> <nombre_base>")
        sys.exit(1)

    archivo = sys.argv[1]
    try:
        lineas_por_archivo = int(sys.argv[2])
    except ValueError:
        print("El segundo argumento debe ser un número entero.")
        sys.exit(1)

    base = sys.argv[3]

    dividir_zxp(archivo, lineas_por_archivo, base)
